package com.pe.pgn.clubpgn.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.pe.pgn.clubpgn.dao.AfiliacionDao;
import com.pe.pgn.clubpgn.domain.ClpbClientePersona;
import com.pe.pgn.clubpgn.domain.ClpbTipoDocumentoPersona;
import com.pe.pgn.clubpgn.domain.ClpmUbigeo;
import com.pe.pgn.clubpgn.domain.beans.BNAfiliacion;
import com.pe.pgn.clubpgn.domain.beans.BNProgramaDetalle;
import com.pe.pgn.clubpgn.service.AfiliacionService;

/**
 * @author Frank
 * */

@SuppressWarnings("rawtypes")
@Service("afiliacionService")
public class AfiliacionServiceImpl extends GenericManagerImpl<ClpbClientePersona, Long> implements AfiliacionService{

	@Autowired
	private AfiliacionDao afiliacionDao;
	
	public List findEmpresasCelulares(boolean itemDefault) {
		return afiliacionDao.findEmpresasCelulares(itemDefault);
	}
	
	public List findEstadosCiviles() {
		return afiliacionDao.findEstadosCiviles();
	}
	
	public List findTiposDocumentoPersona() {
		return afiliacionDao.findTiposDocumentoPersona();
	}
	
	public List findUbigeos() {
		return afiliacionDao.findUbigeos();
	}

	public List<BNProgramaDetalle> getListarProgramas() {
		return afiliacionDao.getListarProgramas();
	}
	
	public BNAfiliacion findClientePersonaPorCoDocumento(String coDocument,
			String codeTipoDoc) {
		return afiliacionDao.findClientePersonaPorCoDocumento(coDocument,codeTipoDoc);
	}

	public Long getNumeroCaracteresByIdTipoDoc(Long idTipoDoc) {
		return afiliacionDao.getNumeroCaracteresByIdTipoDoc(idTipoDoc);
	}
	
	public HashMap getCoTarjetaPersonaInactivaByIDClientePersona(Long id) {
		return afiliacionDao.getCoTarjetaPersonaInactivaByIDClientePersona(id);
	}
	
	public String isValidCodTarjetaPersona(String codigoTarjeta,
			Long coEstacion, Long coClientePersona, boolean isValidateStatus, String deTarjetaAsig) {
		return afiliacionDao.isValidCodTarjetaPersona(codigoTarjeta,
		coEstacion,coClientePersona,isValidateStatus,deTarjetaAsig);
	}
	
	public boolean isValidCodNumeroDocClientePersona(
			String coCodeNumeroDocumento, Long idClientePersona) {
		return afiliacionDao.isValidCodNumeroDocClientePersona(coCodeNumeroDocumento,idClientePersona);
	}
	
	public String isValidCoPrograma(String coPrograma,
			List<BNProgramaDetalle> listProgram) {
		return afiliacionDao.isValidCoPrograma(coPrograma,listProgram);
	}
	
	public HashMap getCoTarjetaPersonaByIDClientePersona(Long id) {
		return afiliacionDao.getCoTarjetaPersonaByIDClientePersona(id);
	}
	
	public void updateActivoTarjetaPersona(String coTarjetaAsig) {
		afiliacionDao.updateActivoTarjetaPersona(coTarjetaAsig);
	}
	
	public void updateInactivoTarjetaPersona(String coTarjetaAsig, boolean setearFechaAnulacion) {
		afiliacionDao.updateInactivoTarjetaPersona(coTarjetaAsig, setearFechaAnulacion);
	}
	
	public ClpbClientePersona setValuesOfBNAfiliacion(BNAfiliacion afiliacion) {
		return afiliacionDao.setValuesOfBNAfiliacion(afiliacion);
	}
	
	public void saveOrUpdateClientePersona(ClpbClientePersona bean) {
		afiliacionDao.saveOrUpdateClientePersona(bean);
	}
	
	public void insertFirstTarjetaPersona(ClpbClientePersona bean) {
		afiliacionDao.insertFirstTarjetaPersona(bean);
	}
	
	public void insertClientePrograma(ClpbClientePersona bean, String coPrograma) {
		afiliacionDao.insertClientePrograma(bean,coPrograma);
	}
	
	public void deleteProgramasByCoCliente(ClpbClientePersona bean) {
		afiliacionDao.deleteProgramasByCoCliente(bean);		
	}

	public List findDepartamentosUbigeo(boolean isItemDefault) {
		return afiliacionDao.findDepartamentosUbigeo(isItemDefault);
	}
	
	public List findDistritoUbigeo(String coDepartamento,String coProvincia, boolean isItemDefault) {
		return afiliacionDao.findDistritoUbigeo(coDepartamento,coProvincia, isItemDefault);
	}

	public List findPronvinciaUbigeo(String coDepartamento, boolean isItemDefault) {
		return afiliacionDao.findPronvinciaUbigeo(coDepartamento, isItemDefault);
	}

	public ClpmUbigeo getUbigeo(String coDepartamento, String coProvincia,
			String coDistrito) {
		return afiliacionDao.getUbigeo(coDepartamento,coProvincia, coDistrito);
	}

	public ClpbTipoDocumentoPersona getTipoDocumentoPersonaByID(
			String coTipoDocumentoPersona) {
		return afiliacionDao.getTipoDocumentoPersonaByID(coTipoDocumentoPersona);
	}

	public void updateClientePrograma(ClpbClientePersona bean,
			BNProgramaDetalle bnDetalle) {
		afiliacionDao.updateClientePrograma(bean,bnDetalle);
	}

	public int getNumCardsByUser(Long idCliente) {
		return afiliacionDao.getNumCardsByUser(idCliente);
	}


	@Override
	public int verificarSiYaEsClientePorDocumento(String coNumeroDocumento) {
		return afiliacionDao.verificarSiYaEsClientePorDocumento(coNumeroDocumento);
	}

	@Override
	public Map<String, Object> obtenerEmpresaAfiliadora() {
		return afiliacionDao.obtenerEmpresaAfiliadora();
	}
	
	
	public List<BNProgramaDetalle> getListarProgramasxDefecto(){
		return afiliacionDao.getListarProgramasxDefecto();
	}
}
